require('dotenv').config()
const mysql = require('mysql2/promise')
const redis = require('redis')

// MySQL 配置
const mysqlConfig = {
	host: process.env.MYSQL_HOST || 'localhost',
	user: process.env.MYSQL_USER || 'root',
	password: process.env.MYSQL_PASSWORD || '123456',
	database: process.env.MYSQL_DB || 'blog',
    port: process.env.MYSQL_PORT || 3306,
	waitForConnections: true, // 允许排队等待
	connectionLimit: 10, // 最大连接数
	queueLimit: 0, // 最多排队 0 个请求
	timezone: '+08:00', // 时区东8区
}

// 创建 MySQL 连接池
const mysqlPool = mysql.createPool(mysqlConfig)

mysqlPool.on('error', (err) => {
	console.error('MySQL error:', err)
})

mysqlPool.getConnection().then((connection) => {
    console.log('mysql 连接成功！')
}).catch(err => {
    console.error('mysql 连接失败！', err)
})


// Redis 配置
const redisConfig = {
    socket: {
        host: process.env.REDIS_HOST || 'localhost',
        port: process.env.REDIS_PORT || 6379,
    },
    // username: process.env.REDIS_USERNAME ? process.env.REDIS_USERNAME : null,
    password: process.env.REDIS_PASSWORD ? process.env.REDIS_PASSWORD : null,
}

// 创建 Redis 客户端 - 用于常规操作
const redisClient = redis.createClient(redisConfig)

// 创建 Redis 客户端 - 专门用于订阅
const redisSubscriber = redis.createClient(redisConfig)

// 键名生成函数
const getCodeKey = (email, type = 'reset_password') => `verification:${type}:${email}`

// 处理 Redis 连接事件
redisClient.on('connect', () => {
    console.log('Redis 连接成功')
})

// 连接 Redis 订阅客户端
redisSubscriber.connect().then(() => {
    console.log('Redis 订阅客户端连接成功')
}).catch(err => {
    console.error('Redis 订阅客户端连接失败:', err)
})

// 处理 Redis 连接错误
redisClient.on('error', (err) => {
	console.error('Redis error:', err)
})

redisSubscriber.on('error', (err) => {
    console.error('Redis 订阅客户端错误:', err)
})

// 连接 Redis
redisClient.connect()


module.exports = { mysqlPool, redisClient, redisSubscriber, getCodeKey }
